// EDMatrix3d.h: interface for the EDMatrix3d class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_EDMATRIX3D_H__64112091_C329_4970_B243_2BC403E7A228__INCLUDED_)
#define AFX_EDMATRIX3D_H__64112091_C329_4970_B243_2BC403E7A228__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "EDVector3d.h"
#include "EDPoint3d.h"

class EDMatrix3d  
{
public:
	EDMatrix3d();
	virtual ~EDMatrix3d();

private:
	EDSQLExpression m_mtr[4][4];

public://Operator
	EDMatrix3d& operator = ( const EDMatrix3d& mtr );
	EDSQLExpression& operator () ( const int iRow, const int iCol );

public:
	void SetFromGe ( const AcGeMatrix3d& mtr );
	void SetToGe ( AcGeMatrix3d& mtr );
	void CopyFrom ( const EDSQLExpression exp[4][4] );
	void Clear();
	void SetToIdentity();
	BOOL IsSingleDigital();

public:
	void VX ( const AcGeVector3d& v );
	void VX ( const EDVector3d& v );
	void VX ( const EDSQLExpression exp[3] );
	void VX ( const EDSQLExpression exp0, const EDSQLExpression exp1, const EDSQLExpression exp2 );
	AcGeVector3d VX();

	void VY ( const AcGeVector3d& v );
	void VY ( const EDVector3d& v );
	void VY ( const EDSQLExpression exp[3] );
	void VY ( const EDSQLExpression exp0, const EDSQLExpression exp1, const EDSQLExpression exp2 );
	AcGeVector3d VY();

	void VZ ( const AcGeVector3d& v );
	void VZ ( const EDVector3d& v );
	void VZ ( const EDSQLExpression exp[3] );
	void VZ ( const EDSQLExpression exp0, const EDSQLExpression exp1, const EDSQLExpression exp2 );
	AcGeVector3d VZ();

	void PT ( const AcGePoint3d& v );
	void PT ( const EDPoint3d& v );
	void PT ( const EDSQLExpression exp[3] );
	void PT ( const EDSQLExpression exp0, const EDSQLExpression exp1, const EDSQLExpression exp2 );
	AcGePoint3d PT();

public:
	void Replace ( const CVarArray* pVarAr, const int nStart = 0 );

};

#endif // !defined(AFX_EDMATRIX3D_H__64112091_C329_4970_B243_2BC403E7A228__INCLUDED_)
